package org.jypj.dev.util;

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;

public class FileUtil {

    public static void main(String[] args) {
        String fileName = "20161105152036099.jpg";
        System.out.println(fileName.substring(8, 10));
    }

    public static void downLoadFile(String path, HttpServletResponse response, String fileName) {
        try {
            response.reset();
            response.setContentType("application/octet-stream");
            File file = new File(path);
            String fileName1 = new String(fileName.getBytes("UTF-8"), "ISO8859-1");
            response.setHeader("Content-disposition", "attachment; filename=" + fileName1+".zip");
            BufferedInputStream bis = null;
            BufferedOutputStream bos = null;
            try {
                bis = new BufferedInputStream(new FileInputStream(file));
                bos = new BufferedOutputStream(response.getOutputStream());

                byte[] buff = new byte[2048];
                int bytesRead;
                while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
                    bos.write(buff, 0, bytesRead);
                }
                bos.flush();

            } catch (final IOException e) {
                e.printStackTrace();
            } finally {
                if (bis != null) {
                    bis.close();
                    bis = null;
                }
                if (bos != null) {
                    bos.close();
                    bos = null;
                }
            }
            return;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 文件上传 不需要进行分类
     *
     * @param realpath 文件上传的路径 /noticeFile
     * @param file     上传的文件
     * @return
     * @throws Exception
     */
    public static String upload(String realpath, MultipartFile file) throws Exception {
        // 获取上传文件的总目录
        String filePath = PropertyUtil.getProperties("file_path");
        // 获取文件的名称
        String fileName = file.getOriginalFilename();
        // 文件的后缀名
        String ext = fileName.substring(fileName.lastIndexOf(".") + 1);

        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");

        String timeStamp = sdf.format(new Date());

        // 时间戳命名文件
        String newName = timeStamp + "." + ext;

        // D:/upload/noticeFile
        String path = filePath + realpath;

        // 创建一个目录
        File targetFile = new File(path, newName);
        // 如果目标文件不存在就创建
        if (!targetFile.exists()) {
            targetFile.mkdirs();
        }
        // 上传文件
        file.transferTo(targetFile);

        // 返回图片的真实地址用于数据库的保存
        String file_path = realpath + "/" + newName;

        return file_path;
    }

    /**
     * 上传文件 文件目录按照文件名称进行分类
     *
     * @param realpath
     * @param file
     * @return
     * @throws Exception
     */
    public static String upload2(String realpath, MultipartFile file) throws Exception {
        // 获取上传文件的总目录
        String filePath = PropertyUtil.getProperties("file_path");
        // 获取文件的名称
        String fileName = file.getOriginalFilename();

        String yyyy = fileName.substring(0, 4);
        String MM = fileName.substring(4, 6);
        String dd = fileName.substring(6, 8);
        String HH = fileName.substring(8, 10);

        // D:/upload/emergyFile/2016-11/09/15/201611091527099.jpg
        String path = filePath + realpath + "/" + yyyy + "-" + MM + "/" + dd + "/" + HH;

        // 创建一个目录
        File targetFile = new File(path, fileName);
        // 如果目标文件不存在就创建
        if (!targetFile.exists()) {
            targetFile.mkdirs();
        }
        // 上传文件
        file.transferTo(targetFile);

        // 返回图片的真实地址用于数据库的保存
        String file_path = realpath + "/" + yyyy + "-" + MM + "/" + dd + "/" + HH + "/" + fileName;
        System.out.println("上传文件路径=" + file_path);
        return file_path;
    }

    /**
     * 遍歷文件夾下所有文件
     *
     * @param strPath
     * @return
     */
    public static List<File> getFileList(String strPath) {
        List<File> filelist = new ArrayList<>();
        File dir = new File(strPath);
        File[] files = dir.listFiles(); // 该文件目录下文件全部放入数组
        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                String fileName = files[i].getName();
                if (files[i].isDirectory()) { // 判断是文件还是文件夹
                    getFileList(files[i].getAbsolutePath()); // 获取文件绝对路径
                } else { // 判断文件名是否以.avi结尾
                    String strFileName = files[i].getAbsolutePath();
                    System.out.println("---" + strFileName);
                    filelist.add(files[i]);
                }
            }

        }
        return filelist;
    }

}
